#include "empaquetadorSoap.h"

empaquetadorSoap::empaquetadorSoap() {}

empaquetadorSoap::~empaquetadorSoap() {}

xmlDocPtr empaquetadorSoap::empaquetar(char * rutaArchivo){
	std::string name;
	xmlDocPtr mensajeSoap, circuitoEnXml;
	xmlNodePtr rootSoap, nodeSoap, nodeXml, rootXml,nodeBody;
	if ((circuitoEnXml = xmlParseFile(rutaArchivo)) == NULL) {

		return NULL;
	}
	//creo msj soap para que contenga los datos
	mensajeSoap = xmlNewDoc((xmlChar*)"1.0");
	rootSoap = xmlNewDocNode(mensajeSoap, NULL,(xmlChar*)ENVELOPE,NULL );
	xmlDocSetRootElement(mensajeSoap, rootSoap);
	xmlSetProp(rootSoap,(xmlChar*)XMLNS, (xmlChar*)"http://schemas.xmlsoap.org/soap/envelope/");
	//aca tendria q definir el namespace
	rootXml = xmlDocGetRootElement (circuitoEnXml);
	nodeXml = rootXml->xmlChildrenNode;
	nodeBody= xmlNewChild(rootSoap, NULL, (xmlChar*)BODY,NULL);

	do{
		name = (char*)  nodeXml->name;

		if(name.compare(CIRCUITO) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_circuito(nodeXml,nodeSoap);
		}
		else if(name.compare(COMPUERTAS) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_compuertas(nodeXml ,nodeSoap);
		}
		else if (name.compare(ENTRADAS) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_entradas(nodeXml ,nodeSoap);
		}
		else if (name.compare(SALIDAS) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_salidas(nodeXml,nodeSoap);
		}
		else if (name.compare(CONEXIONES) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_conexiones(nodeXml,nodeSoap);
		}
		else if (name.compare(CABLES) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_cables(nodeXml,nodeSoap);
		}
		else if (name.compare(ELEMENTOS_EXTERNOS) == 0){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)nodeXml->name,NULL);
			this->parsear_elementos_externos(nodeXml,nodeSoap);
		}
		else{}

		nodeXml = nodeXml->next;
	}while(nodeXml != NULL); //leo siguiente tag

	return mensajeSoap;
}

xmlDocPtr empaquetadorSoap::empaquetar_datos_entrada_salida(int entradas, int salidas){
		xmlDocPtr mensajeSoap;
		xmlNodePtr rootSoap, nodeSoap, nodeBody;
		char buffer[10];

	  	mensajeSoap = xmlNewDoc((xmlChar*)"1.0");
	  	rootSoap = xmlNewDocNode(mensajeSoap, NULL,(xmlChar*)ENVELOPE ,NULL );
	  	xmlDocSetRootElement(mensajeSoap, rootSoap);
	  	xmlSetProp(rootSoap,(xmlChar*)XMLNS, (xmlChar*)"http://schemas.xmlsoap.org/soap/envelope/");
	  	nodeBody= xmlNewChild(rootSoap, NULL, (xmlChar*)BODY,NULL);

	  	sprintf (buffer, "%d", entradas);
	  	nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)ENTRADAS,NULL);
	  	xmlSetProp(nodeSoap,(xmlChar*)CANT_ENTR_SOAP, (xmlChar*)buffer);

	  	sprintf (buffer, "%d", salidas);
		nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)SALIDAS,NULL);
		xmlSetProp(nodeSoap,(xmlChar*)CANT_SAL_SOAP, (xmlChar*)buffer);

		return mensajeSoap;
}

xmlDocPtr empaquetadorSoap::empaquetar_resultado_simulacion(std::string resultado){
		xmlDocPtr mensajeSoap;
		xmlNodePtr rootSoap, nodeSoap, nodeBody;

    	//creo msj soap para que contenga los datos
		mensajeSoap = xmlNewDoc((xmlChar*)"1.0");
		rootSoap = xmlNewDocNode(mensajeSoap, NULL,(xmlChar*)ENVELOPE ,NULL );
		xmlDocSetRootElement(mensajeSoap, rootSoap);
		xmlSetProp(rootSoap,(xmlChar*)XMLNS, (xmlChar*)"http://schemas.xmlsoap.org/soap/envelope/");

		//aca tendria q definir el namespace
		nodeBody= xmlNewChild(rootSoap, NULL, (xmlChar*)BODY,NULL);

		nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)SIMULACION,NULL);
		xmlSetProp(nodeSoap,(xmlChar*)RESULTADO, (xmlChar*)(char*)resultado.c_str());

		return mensajeSoap;
}

xmlDocPtr empaquetadorSoap::empaquetar_orden_a_enviar(std::string orden,std::string rutaArchivo, std::string entradas){
		xmlDocPtr mensajeSoap;
		xmlNodePtr rootSoap, nodeSoap, nodeBody;

		//creo msj soap para que contenga los datos
		mensajeSoap = xmlNewDoc((xmlChar*)"1.0");
		rootSoap = xmlNewDocNode(mensajeSoap, NULL,(xmlChar*)ENVELOPE ,NULL );
		xmlDocSetRootElement(mensajeSoap, rootSoap);
		xmlSetProp(rootSoap,(xmlChar*)XMLNS, (xmlChar*)"http://schemas.xmlsoap.org/soap/envelope/");
		//aca tendria q definir el namespace
		nodeBody= xmlNewChild(rootSoap, NULL, (xmlChar*)BODY,NULL);

		if (orden == DATA){
			nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)DATA,NULL);
			xmlSetProp(nodeSoap,(xmlChar*)CIRCUITO_SOAP, (xmlChar*)(char*)rutaArchivo.c_str());
		}
		else if (orden == VER){
					nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)VER,NULL);
					xmlSetProp(nodeSoap,(xmlChar*)CIRCUITO_SOAP, (xmlChar*)(char*)rutaArchivo.c_str());
		}
		else if (orden == SIMULAR){
							nodeSoap = xmlNewChild(nodeBody, NULL, (xmlChar*)SIMULAR,NULL);
							xmlSetProp(nodeSoap,(xmlChar*)CIRCUITO_SOAP, (xmlChar*)(char*)rutaArchivo.c_str());
							xmlSetProp(nodeSoap,(xmlChar*)ENTR_SOAP, (xmlChar*)(char*)entradas.c_str());
		}

		return mensajeSoap;
}
